package com.example.screenrecorder;

/**
 * 录制配置类 - 管理屏幕录制的所有配置参数
 * 包括分辨率、帧率、质量、引擎类型等设置
 */
public class RecordingConfig {
    
    /**
     * 分辨率枚举 - 定义可选的录制分辨率
     * 支持从720p到4K的多种分辨率选项
     */
    public enum Resolution {
        HD_720P(1280, 720, "720p HD"),        // 720p高清分辨率
        FHD_1080P(1920, 1080, "1080p FHD"),  // 1080p全高清分辨率
        QHD_1440P(2560, 1440, "1440p QHD"),  // 1440p四倍高清分辨率
        UHD_4K(3840, 2160, "4K UHD"),        // 4K超高清分辨率
        CUSTOM(0, 0, "自定义");                // 自定义分辨率选项
        
        public final int width;        // 分辨率宽度
        public final int height;       // 分辨率高度
        public final String displayName; // 显示名称
        
        /**
         * 分辨率构造函数
         * @param width 宽度像素值
         * @param height 高度像素值
         * @param displayName 用户界面显示名称
         */
        Resolution(int width, int height, String displayName) {
            this.width = width;
            this.height = height;
            this.displayName = displayName;
        }
    }
    
    /**
     * 帧率枚举 - 定义可选的录制帧率
     * 支持从15fps到60fps的多种帧率选项
     */
    public enum FrameRate {
        FPS_15(15, "15 FPS"),    // 15帧每秒，适合低功耗设备
        FPS_24(24, "24 FPS"),    // 24帧每秒，电影级帧率
        FPS_30(30, "30 FPS"),    // 30帧每秒，标准录制帧率
        FPS_60(60, "60 FPS");    // 60帧每秒，流畅录制帧率
        
        public final int value;        // 帧率数值
        public final String displayName; // 显示名称
        
        /**
         * 帧率构造函数
         * @param value 帧率数值
         * @param displayName 用户界面显示名称
         */
        FrameRate(int value, String displayName) {
            this.value = value;
            this.displayName = displayName;
        }
    }
    
    /**
     * 录制引擎枚举 - 定义两种录制模式
     * 标准引擎适合一般使用，高级引擎支持专业功能
     */
    public enum RecordingEngine {
        STANDARD("标准引擎", "适合一般录制需求"),           // 标准录制引擎
        ADVANCED("高级引擎", "支持暂停续录和时间轴标记");    // 高级录制引擎
        
        public final String name;        // 引擎名称
        public final String description; // 引擎描述
        
        /**
         * 录制引擎构造函数
         * @param name 引擎名称
         * @param description 引擎功能描述
         */
        RecordingEngine(String name, String description) {
            this.name = name;
            this.description = description;
        }
    }
    
    /**
     * 视频质量枚举 - 定义不同的录制质量等级
     * 从低质量到专业级，对应不同的比特率
     */
    public enum VideoQuality {
        LOW(2, "低质量", "2 Mbps"),           // 低质量，2Mbps比特率
        MEDIUM(4, "中等质量", "4 Mbps"),      // 中等质量，4Mbps比特率
        HIGH(8, "高质量", "8 Mbps"),          // 高质量，8Mbps比特率
        ULTRA(12, "超高质量", "12 Mbps"),     // 超高质量，12Mbps比特率
        PROFESSIONAL(20, "专业级", "20 Mbps"); // 专业级，20Mbps比特率
        
        public final int bitrateMbps;        // 比特率（Mbps）
        public final String name;           // 质量名称
        public final String bitrateDisplay; // 比特率显示文本
        
        /**
         * 视频质量构造函数
         * @param bitrateMbps 比特率（兆比特每秒）
         * @param name 质量名称
         * @param bitrateDisplay 比特率显示文本
         */
        VideoQuality(int bitrateMbps, String name, String bitrateDisplay) {
            this.bitrateMbps = bitrateMbps;
            this.name = name;
            this.bitrateDisplay = bitrateDisplay;
        }
    }
    
    // ========== 录制配置参数 ==========
    private Resolution resolution = Resolution.FHD_1080P;        // 录制分辨率，默认1080p
    private FrameRate frameRate = FrameRate.FPS_30;             // 录制帧率，默认30fps
    private RecordingEngine engine = RecordingEngine.STANDARD; // 录制引擎，默认标准引擎
    private VideoQuality quality = VideoQuality.HIGH;           // 视频质量，默认高质量
    private boolean audioEnabled = true;                         // 是否启用音频录制
    private boolean cameraEnabled = false;                      // 是否启用摄像头录制
    private boolean annotationEnabled = false;                  // 是否启用实时标注
    private boolean pauseResumeEnabled = false;                 // 是否启用暂停续录功能
    
    // ========== 摄像头配置参数 ==========
    private boolean frontCameraEnabled = false;                 // 是否启用前置摄像头
    private boolean backCameraEnabled = false;                  // 是否启用后置摄像头
    private boolean beautyFilterEnabled = false;                // 是否启用美颜滤镜
    private int cameraPositionX = 50;                           // 画中画X位置百分比（0-100）
    private int cameraPositionY = 50;                           // 画中画Y位置百分比（0-100）
    private int cameraSize = 30;                                // 画中画大小百分比（10-80）
    
    // ========== 标注配置参数 ==========
    private int annotationColor = 0xFFFF0000;                   // 标注颜色，默认红色
    private int annotationStrokeWidth = 5;                     // 标注笔触粗细（1-20像素）
    
    // ========== Getter和Setter方法 ==========
    
    // 基本录制参数
    public Resolution getResolution() { return resolution; }                    // 获取录制分辨率
    public void setResolution(Resolution resolution) { this.resolution = resolution; } // 设置录制分辨率
    
    public FrameRate getFrameRate() { return frameRate; }                        // 获取录制帧率
    public void setFrameRate(FrameRate frameRate) { this.frameRate = frameRate; } // 设置录制帧率
    
    public RecordingEngine getEngine() { return engine; }                       // 获取录制引擎
    public void setEngine(RecordingEngine engine) { this.engine = engine; }    // 设置录制引擎
    
    public VideoQuality getQuality() { return quality; }                        // 获取视频质量
    public void setQuality(VideoQuality quality) { this.quality = quality; }    // 设置视频质量
    
    // 功能开关
    public boolean isAudioEnabled() { return audioEnabled; }                    // 是否启用音频录制
    public void setAudioEnabled(boolean audioEnabled) { this.audioEnabled = audioEnabled; } // 设置音频录制开关
    
    public boolean isCameraEnabled() { return cameraEnabled; }                  // 是否启用摄像头录制
    public void setCameraEnabled(boolean cameraEnabled) { this.cameraEnabled = cameraEnabled; } // 设置摄像头录制开关
    
    public boolean isAnnotationEnabled() { return annotationEnabled; }          // 是否启用实时标注
    public void setAnnotationEnabled(boolean annotationEnabled) { this.annotationEnabled = annotationEnabled; } // 设置实时标注开关
    
    public boolean isPauseResumeEnabled() { return pauseResumeEnabled; }        // 是否启用暂停续录
    public void setPauseResumeEnabled(boolean pauseResumeEnabled) { this.pauseResumeEnabled = pauseResumeEnabled; } // 设置暂停续录开关
    
    // 摄像头配置
    public boolean isFrontCameraEnabled() { return frontCameraEnabled; }        // 是否启用前置摄像头
    public void setFrontCameraEnabled(boolean frontCameraEnabled) { this.frontCameraEnabled = frontCameraEnabled; } // 设置前置摄像头开关
    
    public boolean isBackCameraEnabled() { return backCameraEnabled; }         // 是否启用后置摄像头
    public void setBackCameraEnabled(boolean backCameraEnabled) { this.backCameraEnabled = backCameraEnabled; } // 设置后置摄像头开关
    
    public boolean isBeautyFilterEnabled() { return beautyFilterEnabled; }      // 是否启用美颜滤镜
    public void setBeautyFilterEnabled(boolean beautyFilterEnabled) { this.beautyFilterEnabled = beautyFilterEnabled; } // 设置美颜滤镜开关
    
    public int getCameraPositionX() { return cameraPositionX; }                // 获取摄像头X位置
    public void setCameraPositionX(int cameraPositionX) { this.cameraPositionX = cameraPositionX; } // 设置摄像头X位置
    
    public int getCameraPositionY() { return cameraPositionY; }                // 获取摄像头Y位置
    public void setCameraPositionY(int cameraPositionY) { this.cameraPositionY = cameraPositionY; } // 设置摄像头Y位置
    
    public int getCameraSize() { return cameraSize; }                          // 获取摄像头大小
    public void setCameraSize(int cameraSize) { this.cameraSize = cameraSize; } // 设置摄像头大小
    
    // 标注配置
    public int getAnnotationColor() { return annotationColor; }               // 获取标注颜色
    public void setAnnotationColor(int annotationColor) { this.annotationColor = annotationColor; } // 设置标注颜色
    
    public int getAnnotationStrokeWidth() { return annotationStrokeWidth; }     // 获取标注笔触粗细
    public void setAnnotationStrokeWidth(int annotationStrokeWidth) { this.annotationStrokeWidth = annotationStrokeWidth; } // 设置标注笔触粗细
    
    // ========== 工具方法 ==========
    
    /**
     * 获取实际录制宽度
     * 如果选择自定义分辨率，则使用设备原生宽度
     * 否则使用配置的分辨率宽度，但不超过设备宽度
     * @param deviceWidth 设备屏幕宽度
     * @return 实际录制宽度
     */
    public int getActualWidth(int deviceWidth) {
        if (resolution == Resolution.CUSTOM) {
            return deviceWidth; // 使用设备原生分辨率
        }
        return Math.min(resolution.width, deviceWidth); // 取配置分辨率和设备分辨率中的较小值
    }
    
    /**
     * 获取实际录制高度
     * 如果选择自定义分辨率，则使用设备原生高度
     * 否则使用配置的分辨率高度，但不超过设备高度
     * @param deviceHeight 设备屏幕高度
     * @return 实际录制高度
     */
    public int getActualHeight(int deviceHeight) {
        if (resolution == Resolution.CUSTOM) {
            return deviceHeight; // 使用设备原生分辨率
        }
        return Math.min(resolution.height, deviceHeight); // 取配置分辨率和设备分辨率中的较小值
    }
    
    /**
     * 获取视频比特率（单位：比特每秒）
     * 将Mbps转换为bps
     * @return 比特率（bps）
     */
    public int getBitrate() {
        return quality.bitrateMbps * 1000 * 1000; // 转换为bps（比特每秒）
    }
}
